"""
实现多任务方式:
    - 多进程模式
    - 多线程模式
    - 协程
进程创建
linux下可以使用fork函数创建进程
windows下可以使用multiprocessing模块创建进程

from multiprocessing import Process
process = Process(target=函数, name=进程的名字, args=给函数传递的参数(可迭代的))
process对象

对象调用方法:
process.start() 启动进程并执行任务
process.run()   只是执行了任务, 但是没有启动进程
process.terminate() 终止
"""

# 创建进程
import os
from multiprocessing import Process
from time import sleep


def task1(s, name):
    while True:
        sleep(s)
        print('这是任务1: ' + str(os.getpid()) + '; 父进程: ' + str(os.getppid()), name)


# os.getpid()获取进程号, os.getppid()获取父进程号

def task2(s, name):
    while True:
        sleep(s)
        print('这是任务2: ' + str(os.getpid()) + '; 父进程: ' + str(os.getppid()), name)


number = 1
if __name__ == '__main__':
    print(os.getpid())
    # p1和p2是主进程创建的两个子进程
    p1 = Process(target=task1, name='任务1', kwargs={'s': 1, 'name': 'aa'})
    p1.start()
    print(p1.name)  # 是由主进程打印的
    p2 = Process(target=task2, name='任务2', args=(2, 'bb'))
    p2.start()
    print(p2.name)  # 是由主进程打印的
    while True:
        number += 1
        sleep(0.2)
        if number == 50:
            p1.terminate()
            p2.terminate()
            break
        else:
            print('number: ', number)
    print('----------')
